/**
 * 
 */
package com.fenoco;

import java.util.logging.Level;
import java.util.logging.Logger;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.ajax4jsf.model.KeepAlive;

import co.com.fenoco.encuentas.persistencia.Usuario;
import co.com.fenoco.encuentas.servicios.IUsuariosLocal;
import co.com.fenoco.encuentas.servicios.ServiceLocator;

/**
 * @author Camilo Forero
 * 
 */
@KeepAlive
public class Autenticacion {
	private String login;
	private String password;
	private IUsuariosLocal usuariosEJB;
	private final String ACTION_CONSULTA = "consulta_encuestas";
	private Usuario usuario;
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	private boolean loggedIn;

	public boolean isLoggedIn() {
		return loggedIn;
	}

	public void setLoggedIn(boolean loggedIn) {
		this.loggedIn = loggedIn;
	}

	public Autenticacion() {
		try {
			usuariosEJB = (IUsuariosLocal) ServiceLocator.getInstance().lookup(
					"Fenoco/UsuariosBean/local");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String autenticar() {
		String retorno = "";
		loggedIn = false;
		try {
			usuario = usuariosEJB.autenticarUsuario(login, password);
			if (usuario != null) {
				// subir a sesion al usuario.
				FacesContext faces = FacesContext.getCurrentInstance();
				HttpSession session = (HttpSession) faces.getExternalContext()
						.getSession(false);
				session.setAttribute("usuario", usuario);
				loggedIn = true;
				retorno = ACTION_CONSULTA;
			} else {

				FacesContext context = FacesContext.getCurrentInstance();
				String msg = "No existe un usuario registrado con la combinacion usuario password registrada";
				FacesMessage fm = new FacesMessage(msg);
				fm.setSeverity(FacesMessage.SEVERITY_ERROR);
				context.addMessage(null, fm);
			}
		} catch (Exception e) {
			e.printStackTrace();
			FacesContext context = FacesContext.getCurrentInstance();
			String msg = e.getMessage();
			FacesMessage fm = new FacesMessage(msg);
			fm.setSeverity(FacesMessage.SEVERITY_ERROR);
			context.addMessage(null, fm);
			Logger.getLogger(Autenticacion.class.getName()).log(Level.SEVERE,
					null, e);
		}
		return retorno;
	}

	public String cerrarSesion() {
		String retorno = "login";
		try {
			FacesContext faces = FacesContext.getCurrentInstance();
			HttpSession session = (HttpSession) faces.getExternalContext()
					.getSession(false);
			loggedIn = false;
			session.invalidate();
		} catch (Exception e) {
			e.printStackTrace();
			FacesContext context = FacesContext.getCurrentInstance();
			String msg = e.getMessage();
			FacesMessage fm = new FacesMessage(msg);
			fm.setSeverity(FacesMessage.SEVERITY_ERROR);
			context.addMessage(null, fm);
			Logger.getLogger(Autenticacion.class.getName()).log(Level.SEVERE,
					null, e);
		}
		return retorno;
	}

	/**
	 * @return the login
	 */
	public String getLogin() {
		return login;
	}

	/**
	 * @param login
	 *            the login to set
	 */
	public void setLogin(String login) {
		this.login = login;
	}

	/**
	 * @return the password
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * @param password
	 *            the password to set
	 */
	public void setPassword(String password) {
		this.password = password;
	}

}
